/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;
import java.util.*;
import javax.swing.DefaultListModel;

/**
 *
 * @author Administrador
 */
public class CtrlDominioPreferencias {
 // El controlador de Dominio gestiona las operaciones del programa y
// controla las llamadas al controlador de vistas y el de datos
    private preferencias pref;
    private necesidades nec;
    private restricciones res;
    private calorias cal;
    private precio p;        

    private cliente cl;
    private CtrlDominioCliente CDC;

    
    
    public CtrlDominioPreferencias(CtrlDominioCliente C) throws Exception
    {
        CDC=C;
        
    }
    
    public void Alta_pref(String[] D,DefaultListModel l1,DefaultListModel l2,DefaultListModel l3, DefaultListModel l4)
    {
        cl=CDC.consultar_cliente(D[0]);
        int cal_t,cal_d,cal_c,precio_t,precio_d,precio_c;
        int i;
        List<String> laux1=new ArrayList();
        List<Integer> laux2=new ArrayList();
        List<String> laux3=new ArrayList();
        List<Integer> laux4=new ArrayList();
        for(i=0;i<l1.size();i++)
        {
             laux1.add((String)l1.get(i));
             if(((String)l2.get(i)).equals("Lunes"))laux2.add(10000000);
                else if(((String)l2.get(i)).equals("Martes"))laux2.add(01000000);
                else if(((String)l2.get(i)).equals("Miercoles"))laux2.add(00100000);
                else if(((String)l2.get(i)).equals("Jueves"))laux2.add(00010000);
                else if(((String)l2.get(i)).equals("Viernes"))laux2.add(00001000);
                else if(((String)l2.get(i)).equals("Sabado"))laux2.add(00000100);
                else if(((String)l2.get(i)).equals("Domingo"))laux2.add(00000010);
                else if(((String)l2.get(i)).equals("Todos"))laux2.add(00000001);
                
        }
        for(i=0;i<l3.size();i++)
        {
             laux3.add((String)l4.get(i));
             if(((String)l3.get(i)).equals("Lunes"))laux4.add(10000000);
                else if(((String)l3.get(i)).equals("Martes"))laux4.add(01000000);
                else if(((String)l3.get(i)).equals("Miercoles"))laux4.add(00100000);
                else if(((String)l3.get(i)).equals("Jueves"))laux4.add(00010000);
                else if(((String)l3.get(i)).equals("Viernes"))laux4.add(00001000);
                else if(((String)l3.get(i)).equals("Sabado"))laux4.add(00000100);
                else if(((String)l3.get(i)).equals("Domingo"))laux4.add(00000010);
                else if(((String)l3.get(i)).equals("Todos"))laux4.add(00000001);
                
        }
      
        res=new restricciones(laux3,laux4);
        nec=new necesidades(laux1,laux2);
        cal_t=toma_int(D[1]);
        cal_d=toma_int(D[2]);
        cal_c=toma_int(D[3]);
        precio_t=toma_int(D[4]);
        precio_d=toma_int(D[5]);
        precio_c=toma_int(D[6]);
        
        cal=new calorias(cal_t,cal_d,cal_c);
        p=new precio(precio_t,precio_d,precio_c);
        pref = new preferencias("por_defecto",nec,res,p,cal);
        cl.anadir_preferencias(pref);

    }
    public int toma_int(String s)
    {
       if(s.equals("")) return 0;
       else return Integer.parseInt(s);
    }
    public int[] Consultar_pref_cal_prec(String DNI)
    {
		int[] prec_cal=new int[6];
		int prec_t,prec_d,prec_c,cal_t,cal_d,cal_c;
        
		cl=CDC.consultar_cliente(DNI);
                
		pref=cl.Consultar_preferencias();
                
                try{
		prec_cal[0]=pref.Get_C_total();
		prec_cal[1]=pref.Get_C_dia();
		prec_cal[2]=pref.Get_C_comida();
		prec_cal[3]=pref.Get_P_total();
		prec_cal[4]=pref.Get_P_dia();
		prec_cal[5]=pref.Get_P_comida();
                }
                catch(Exception e)
                {
                    String[] D={DNI,"","","","","",""};
                    DefaultListModel l1=new DefaultListModel();
                    DefaultListModel l2=new DefaultListModel();
                    DefaultListModel l3=new DefaultListModel();
                    DefaultListModel l4=new DefaultListModel();
                    
                    this.Alta_pref(D,l1,l2,l3,l4);
                }
              
		
		return prec_cal;
    }
public List<String> Consultar_pref_nec(String DNI) 
    {
        cl=CDC.consultar_cliente(DNI);
	pref=cl.Consultar_preferencias();
    
	return pref.Consultar_necesidades_platos();
	}
public List<String> Consultar_pref_res(String DNI){
    
        cl=CDC.consultar_cliente(DNI);
	pref=cl.Consultar_preferencias();
    
	return pref.Consultar_restricciones_platos();
	}
public List<Integer> Consultar_pref_nec_prio(String DNI) 
    {
       cl=CDC.consultar_cliente(DNI);
	pref=cl.Consultar_preferencias();
    
	return pref.Consultar_necesidades_prioridades();
    }
public List<Integer> Consultar_pref_res_prio(String DNI) 
    {
	cl=CDC.consultar_cliente(DNI);
	pref=cl.Consultar_preferencias();

	return pref.Consultar_restricciones_prioridades();
	}

    public void Modificar_pref(String[] D,DefaultListModel l1,DefaultListModel l2,DefaultListModel l3, DefaultListModel l4)
    {
        int cal_t,cal_d,cal_c,precio_t,precio_d,precio_c;
        
	cl=CDC.consultar_cliente(D[0]);
	pref=cl.Consultar_preferencias();
        
        int i;
        
        List<String> laux1;
        List<Integer> laux2;
        List<String> laux3;
        List<Integer> laux4;
        
        //Modificacion selectiva!
        if(!l1.isEmpty())
        {
            laux1=new ArrayList();
            laux2=new ArrayList();
        for(i=0;i<l1.size();i++)
        {
             laux1.add((String)l1.get(i));
             if(((String)l2.get(i)).equals("Lunes"))laux2.add(10000000);
                else if(((String)l2.get(i)).equals("Martes"))laux2.add(01000000);
                else if(((String)l2.get(i)).equals("Miercoles"))laux2.add(00100000);
                else if(((String)l2.get(i)).equals("Jueves"))laux2.add(00010000);
                else if(((String)l2.get(i)).equals("Viernes"))laux2.add(00001000);
                else if(((String)l2.get(i)).equals("Sabado"))laux2.add(00000100);
                else if(((String)l2.get(i)).equals("Domingo"))laux2.add(00000010);
                else if(((String)l2.get(i)).equals("Todos"))laux2.add(00000001);
                
        }
        }
        else 
        {
             laux1=pref.Consultar_necesidades_platos();
             laux2=pref.Consultar_necesidades_prioridades();
        }
         if(!l3.isEmpty())
        {   
            laux3=new ArrayList();
            laux4=new ArrayList();

       for(i=0;i<l3.size();i++)
        {
             laux3.add((String)l4.get(i));
             if(((String)l3.get(i)).equals("Lunes"))laux4.add(10000000);
                else if(((String)l3.get(i)).equals("Martes"))laux4.add(01000000);
                else if(((String)l3.get(i)).equals("Miercoles"))laux4.add(00100000);
                else if(((String)l3.get(i)).equals("Jueves"))laux4.add(00010000);
                else if(((String)l3.get(i)).equals("Viernes"))laux4.add(00001000);
                else if(((String)l3.get(i)).equals("Sabado"))laux4.add(00000100);
                else if(((String)l3.get(i)).equals("Domingo"))laux4.add(00000010);
                else if(((String)l3.get(i)).equals("Todos"))laux4.add(00000001);
                
        }
         }
         else
         { 
            laux3=pref.Consultar_restricciones_platos();
            laux4=pref.Consultar_restricciones_prioridades();
         }
      
        res=new restricciones(laux3,laux4);
        nec=new necesidades(laux1,laux2);
      
        
        
        if(D[1].equals(""))cal_t=pref.Get_C_total();
        
        else cal_t=toma_int(D[1]);
        
        if(D[2].equals(""))cal_d=pref.Get_C_dia() ;
        else cal_d=toma_int(D[2]);
        
        if(D[3].equals(""))cal_c=pref.Get_C_comida() ;
        else cal_c=toma_int(D[3]);
        
        if(D[4].equals(""))precio_t=pref.Get_P_total() ;
        else precio_t=toma_int(D[4]);
        
        if(D[5].equals(""))precio_d=pref.Get_P_dia() ;
        else precio_d=toma_int(D[5]);
        
        if(D[6].equals(""))precio_c=pref.Get_P_comida() ;
        else precio_c=toma_int(D[6]);
        
        cal=new calorias(cal_t,cal_d,cal_c);
        p=new precio(precio_t,precio_d,precio_c);
        
        pref.Modificar_preferencias("por_defecto", nec, res, p, cal);

    }
    
}
